package 
{
	import fl.transitions.*;
	import fl.transitions.easing.*;
	import flash.display.MovieClip;
	import flash.display.Stage;
	import flash.events.MouseEvent;
	import flash.display.Shape;
	import flash.display.Sprite;
	
	import flash.events.Event;
	
	/**
	 * Esta es la clase encargada de de gestionar el personaje 
	 * principal en el escenario
	 * 
	 * @author ... STEVENS PINEDA, GERMAN CAÑON, SEBASTIAN GONZALES
	 */
	public class Persona extends MovieClip
	{
		private var x1:int
		private var x2:int
		private var y1:int
		private var y2:int
		
		private var xI:int
		private var yI:int
		private var xF:int
		private var yF:int
		
		private var angulo:int
		
		
		private var tweenX:Tween;
		private var tweenY:Tween;
		
		public var nivel:BarraNivel
		
		private const RADIO_MOVIMIENTO:int = 50;
		
		private var context:Escenario
		
		
		/**
		 * Este es el constructor de la clase, que inicia un vector
		 * en una zona especificada la cual esta infectada por el virus del dengue
		 * 
		 * @param	x1 posicion x inicial
		 * @param	y1 posicion y inicial
		 * @param	x2 posicion x final
		 * @param	y2 posicion y final
		 * @param	xI posicion x para la animacion
		 * @param	yI posicion y para la animacion
		 * @param	nivel vida inicial de la persona
		 * @param	context contexto
		 */
		public function Persona(x1:int, y1:int, x2:int, y2:int, xI:int, yI:int, nivel:BarraNivel, context:Escenario) {
			
			this.x1 = x1
			this.x2 = x2
			this.y1 = y1
			this.y2 = y2
			
			this.nivel = nivel
			
			this.context = context
			
			/*x = Math.round(Math.random() * (x2 - x1 - width)) + (x1 + width/2);
			y = Math.round(Math.random() * (y2 - y1 - height)) + (y1 + height/2);
			*/
			this.xI = xI
			this.yI = yI

		}
		
		/*
		 * Este es el metodo encargado de iniciar las acciones del movimiento de los vectores
		 * */
		public function run() {
			
			var angulo:int 
			

			rotation = angulo + 45

			xF = Math.round(Math.random() * 900);
			yF = Math.round(Math.random() * 500);
			
			//rotamos la imagen
			rotation = (180*Math.atan2(yF-yI,xF-xI))/Math.PI + 90

		
			var dXY:Number = Math.sqrt(Math.pow(xF - xI, 2) + Math.pow(yF - yI, 2));

			var time:Number = dXY*2 / 100;
			
			tweenX = new Tween(this, "x", null, xI, xF, time, true);
			tweenY = new Tween(this, "y", null, yI, yF, time, true);

			tweenX.start()
			tweenY.start()
			
			tweenY.addEventListener(TweenEvent.MOTION_FINISH, parar);
			tweenY.addEventListener(TweenEvent.MOTION_CHANGE, movingTween);
		}
		
		/**
		 * realiza el movimiento del personaje
		 * @param	e origend el evento
		 */
		private function movingTween(e:Event):void{
			
			if (context.persona_select == this) {
				
				context.select_p.x =  x - (width /2)
				context.select_p.y =  y - (height / 2)
			}
			
			nivel.x = this.x - nivel.width /2
			nivel.y = this.y - (this.height/2)
		}		
		
		/*
		 * 
		 * Esta funcion determina sii el punto generado aleatoriamente esta dentro de la zona 
		 * cubierta por los mosquitos.
		 * */
		private function isZone():Boolean {

			if (xF >= x1 && xF <= x2  && yF >= y1 && yF <= y2) {
				return true
			}
			else {
				return false
			}
		}
		
		/**
		 * Detiene la ejecucion del personaje
		 * @param	e origen del evento
		 */
		private function parar(e:TweenEvent):void
		{
			xI = xF
			yI = yF
			x = xI
			y = yI
			xF = 0
			yF = 0
			run()
		}
		
		public function getX():int {
			return x
		}
		
		public function getY():int {
			return y
		}
		
		public function setY(y:int) {
			this.y = y
		}
		
		public function setX(x:int) {
			this.x = x
		}
		
		public function getAnngulo():int {
			return angulo
		}
		
		public function setAngulo(angulo:int) {
			this.angulo = angulo
		}
		
		
		
	}
	
}